package day14;

public class Singleton {
	// 懒汉式的单例模式
	// 以时间换空间（啥时候用，啥时候new）

	private volatile static Singleton instance = null;
	
	private Singleton() {
	} 
	
	//防止多线程的进入（加锁）
//		public static synchronized Singleton getInstance() {
//			if (instance == null) {
//				instance = new Singleton();
//			}
//			return instance;
//		}
	
	//加锁是同步，很影响性能，优化加锁
	//当instance == null 时候才会加锁处理，不为null的时候就不会加锁
	//这样就不会影响性能
	public static Singleton getInstance() {
		if (instance == null) {
			synchronized ( Singleton.class) {
				if (instance == null) {
					instance = new Singleton();
				}
			}
		}
		return instance;
	}
	
	
}

// 饿汉式的单例模式
//以空间换时间（直接new好，占用空间，但是用的时候节省时间）
class Singleton2{
	private static Singleton2 instance = new Singleton2();
	
	private Singleton2() {
		
	}
	
	public static Singleton2 getSingleton2() {
		return instance;
	}
}

